package com.hedl.elasticsearch.service;

import co.elastic.clients.elasticsearch.core.IndexResponse;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
import co.elastic.clients.elasticsearch.indices.DeleteIndexResponse;
import co.elastic.clients.elasticsearch.indices.GetIndexResponse;
import com.hedl.elasticsearch.po.User;

import java.io.IOException;
import java.util.List;

/**
 * ProjectName: stuy-elasticsearch
 * DateTime: 2023/9/10 01:44
 * Author: Big Watermelon
 * Description:
 */
public interface ElasticsearchService<T>{

    /**
     * 判断索引是否存在.
     * @param indexName index名称
     */
    public boolean existIndex(String indexName);

    /**
     * 创建索引.
     * @param indexName index名称
     */
    public void createIndex(String indexName);

    /**
     * 添加记录.
     */
    public void addDocument(T data, String indexName);

    /**
     * 批量添加.
     * @param dataList 添加的数量集合
     * @param indexName indexName
     */
    public void batchAddDocument(List<T> dataList, String indexName);

    /**
     * 根据索引名称和字段查询数据.
     *
     * @param indexName 索引名称
     * @param filedValue 查询字段值
     * @param filedName 查询字段名称
     */
    public List<T> findDataList(String indexName, String filedName, String filedValue,Class<T> className);

    /**
     * 使用索引名查询_search
     * @param indexName 索引名称
     * @return
     */
    public SearchResponse<User> getIndexSearch(String indexName);

    /**
     * 普通索引查询
     * @param indexName 索引名称
     * @return
     */
    public GetIndexResponse getIndex(String indexName);

    /**
     * 指定删除索引
     * @param indexName 索引名称
     * @return
     */
    public DeleteIndexResponse deleteIndex(String indexName);

    /**
     * 添加文档数据
     * @param indexName 索引名称
     * @param id ID
     * @param source 数据
     * @return
     */
    public IndexResponse insertDocsData(String indexName, String id, T source);

}
